/**
 * 颜色面板组件类型定义
 */

// RGB颜色对象
export interface RGBColor {
  r: number
  g: number
  b: number
}

// HSL颜色对象
export interface HSLColor {
  h: number
  s: number
  l: number
}

// HSV颜色对象
export interface HSVColor {
  h: number
  s: number
  v: number
}

// 颜色面板Props
export interface ColorPanelProps {
  /** 当前选中的颜色值 */
  modelValue?: string
  /** 是否显示透明度控制 */
  showOpacity?: boolean
  /** 预设颜色列表 */
  presetColors?: string[]
  /** 是否显示颜色历史 */
  showHistory?: boolean
  /** 历史记录最大数量 */
  maxHistoryCount?: number
  /** 面板宽度 */
  width?: string | number
  /** 面板高度 */
  height?: string | number
  /** 是否禁用 */
  disabled?: boolean
}

// 颜色面板事件
export interface ColorPanelEmits {
  /** 颜色值更新事件 */
  (e: 'update:modelValue', value: string): void
  /** 颜色变化事件 */
  (e: 'change', value: string): void
  /** 关闭面板事件 */
  (e: 'close'): void
  /** 确认选择事件 */
  (e: 'confirm', value: string): void
  /** 取消选择事件 */
  (e: 'cancel'): void
}

// 颜色格式枚举
export enum ColorFormat {
  HEX = 'hex',
  RGB = 'rgb',
  RGBA = 'rgba',
  HSL = 'hsl',
  HSLA = 'hsla',
  HSV = 'hsv'
}

// 颜色工具函数类型
export interface ColorUtils {
  /** 十六进制转RGB */
  hexToRgb(hex: string): RGBColor | null
  /** RGB转十六进制 */
  rgbToHex(r: number, g: number, b: number): string
  /** RGB转HSL */
  rgbToHsl(r: number, g: number, b: number): HSLColor
  /** HSL转RGB */
  hslToRgb(h: number, s: number, l: number): RGBColor
  /** RGB转HSV */
  rgbToHsv(r: number, g: number, b: number): HSVColor
  /** HSV转RGB */
  hsvToRgb(h: number, s: number, v: number): RGBColor
  /** 验证颜色格式 */
  isValidColor(color: string): boolean
  /** 获取颜色亮度 */
  getLuminance(r: number, g: number, b: number): number
  /** 获取对比色 */
  getContrastColor(r: number, g: number, b: number): string
}

// 颜色面板状态
export interface ColorPanelState {
  /** 当前选中的颜色 */
  selectedColor: string
  /** RGB颜色值 */
  rgbColor: RGBColor
  /** 透明度值 */
  opacity: number
  /** 颜色历史记录 */
  colorHistory: string[]
  /** 是否显示面板 */
  isVisible: boolean
  /** 当前颜色格式 */
  colorFormat: ColorFormat
}

// 颜色面板配置
export interface ColorPanelConfig {
  /** 默认颜色 */
  defaultColor: string
  /** 预设颜色列表 */
  presetColors: string[]
  /** 最大历史记录数 */
  maxHistoryCount: number
  /** 是否启用透明度 */
  enableOpacity: boolean
  /** 是否显示颜色历史 */
  showHistory: boolean
  /** 面板主题 */
  theme: 'light' | 'dark'
  /** 面板位置 */
  position: 'top' | 'bottom' | 'left' | 'right'
}

// 颜色选择器选项
export interface ColorPickerOptions {
  /** 是否显示预设颜色 */
  showPresetColors?: boolean
  /** 是否显示自定义颜色 */
  showCustomColor?: boolean
  /** 是否显示透明度控制 */
  showOpacity?: boolean
  /** 是否显示颜色历史 */
  showHistory?: boolean
  /** 是否显示颜色格式选择 */
  showFormatSelector?: boolean
  /** 是否显示颜色预览 */
  showPreview?: boolean
  /** 是否显示颜色值输入 */
  showColorInput?: boolean
}

// 颜色面板暴露的方法
export interface ColorPanelExpose {
  /** 打开颜色面板 */
  open(): void
  /** 关闭颜色面板 */
  close(): void
  /** 设置颜色值 */
  setColor(color: string): void
  /** 获取当前颜色值 */
  getColor(): string
  /** 清空颜色历史 */
  clearHistory(): void
  /** 添加颜色到历史 */
  addToHistory(color: string): void
} 